import axios from 'axios'
import store from '@/store'
import Router from '@/router'
import { removeToken, getToken } from '@/utils/auth'
import { Message } from 'element-ui'

const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  withCredentials: true,
  timeout: 500000
})

// axios请求拦截器
service.interceptors.request.use(
  config => {
    console.log('请求拦截器 - 准备发送请求:', config.url)
    
    // 直接从localStorage获取token，避免可能的状态同步问题
    const token = localStorage.getItem('zcn_token')
    console.log('请求拦截器 - 直接从localStorage获取的token:', token)
    
    if (token) {
      console.log('请求拦截器 - 添加token到请求头')
      // 在请求头中添加token，根据实际后端要求设置header名称
      config.headers['Authorization'] = `Bearer ${token}` // 标准JWT格式
      config.headers['token'] = token // 兼容原有格式
      
      // 打印完整的请求头，用于调试
      console.log('请求头:', JSON.stringify(config.headers))
    } else {
      console.log('请求拦截器 - 未找到token，不添加认证头')
    }
    return config
  },
  error => {
    console.error('请求拦截器 - 请求错误:', error)
    return Promise.reject(error)
  }
)

// axios响应拦截器
service.interceptors.response.use(
  res => {
    console.log('响应拦截器 - 收到响应:', res.config.url, res.status)
    if (res.data && res.data.code === 0 && res.data.msg === 'NOT_LOGIN') {
      console.log('响应拦截器 - 检测到未登录状态，跳转到登录页')
      removeToken()
      Router.replace('/login')
    }
    return res
  },
  error => {
    console.error('响应拦截器 - 响应错误:', error)
    const { response } = error
    if (response) {
      console.log('响应拦截器 - HTTP状态码:', response.status)
      if (response.status === 401) {
        console.log('HTTP 401 → 自动跳转登录页')
        Message.error('登录已过期，请重新登录')
        removeToken()
        Router.replace('/login')
      } else if (response.status === 403) {
        Message.error('没有权限访问该资源')
      } else {
        Message.error(response.data?.message || '请求失败')
      }
    } else {
      Message.error('网络错误，请检查您的网络连接')
    }
    return Promise.reject(error)
  }
)

export default service
